home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PROGRAMM / PASCAL / H442.ZIP / DEMOS.LZH / PAGEPRNT.PAS < prev    next >
Pascal/Delphi Source File  |  1993-12-01  |  39KB  |  840 lines

  1. {*****************************************************************************}
  2. {*FILE:PAGEPRNT.PAS, A printer set up utility, intended mainly for the       *}
  3. {*Panasonic KX-P1081 dot matrix printer, but will also set up many other IBM *}
  4. {*and Epson compatible printers, using graphic and text modes.               *}
  5. {*This version may only be used from the command line as it uses dos input   *}
  6. {*/output routines and thus cannot be made memory resident, It does however  *}
  7. {*contain a complete print spooler as a bonus. see manual for user instruct. *}
  8. {*The memory resident version called PRINTER.PAS does not have the print     *}
  9. {*spooler facility.                                                          *}
  10. {*PAGEPRNT.PAS V1.5b (c)1993 (01/12/93) (MAIN FILE)                          *}
  11. {*PAGEPRNT.PFS V1.5b (c)1993 (01/12/93) (PRINT SPOOLER ROUTINES ONLY)        *}
  12. {*****************************************************************************}
  13. program PAGEPRNT;
  14.  
  15. {******}
  16. {*USES*}
  17. {******}
  18. uses crt,dos,printer,winmen;
  19.  
  20. {******************}
  21. {*TYPE DEFINITIONS*}
  22. {******************}
  23. type
  24.    option = record
  25.                yes : boolean;
  26.                num : byte;
  27.             end;
  28.  
  29.    PathStr = string[79];
  30.     DirStr = string[67];
  31.     NameStr = string[8];
  32.     ExtStr = string[4];
  33.  
  34. {*****************************}
  35. {*GLOBAL VARIABLE DEFINITIONS*}
  36. {*****************************}
  37. var
  38.    inthandler : pointer;
  39.    regs : registers;
  40.    menu_main,menu_char1,menu_set,menu_mode,menu_comb,menu_pitch,menu_linesp,
  41.    menu_char2,menu_pfeed,menu_pgfrmt,menu_wproc,menu_datacon,menu_misc,
  42.    menu_print,menu_flist,
  43.    hello,error,setings,input,printing,layout,plen,
  44.    n,n1,actionX,actionY,ncopies,fncopies,loop1,loop2,t,b : byte;
  45.    m1c,m2c,m3c,m4c,m5c,m6c,m7c,m8c,m9c,m10c,m11c,m12c,m13c,m14c,m15c,
  46.    index,shour,smin,ssec,s100sec,syear,smonth,sday,sdow,count,files,
  47.    textattr_safe : word;
  48.    errpos,linenum,pagenum : integer;
  49.    f : datetime;
  50.    mt,mtc,list : pt_mtext;
  51.    scr,infile : text;
  52.    line : string[81];
  53.    strn,strn1 : string[15];
  54.    copies,fcopies : string[2];
  55.    ans,colotog : char;
  56.    dpfname : pathstr;
  57.    dpname : dirstr;
  58.    name : namestr;
  59.    ext : extstr;
  60.    fname,fdate,ftime,fsize,sdate,stime,pgnum,pbreak,quick,Icopies : boolean;
  61.    opt : array[1..400] of option;
  62.    fspec : searchrec;
  63.  
  64. {***************}
  65. {*INCLUDE FILES*}
  66. {***************}
  67. {$I \TP6\PAS\WM1_5\PAGEPRNT.PFS}            {*PRINT SPOOLER ROUTINES FILE*}
  68.  
  69. {**************************************************************************}
  70. {*PROCEDURE:SEND_TO_PRN, This procedure sends a series of bytes to the std*}
  71. {*printer (parallel) device, the number of bytes is defined in "num", the *}
  72. {*actual values are placed in "v1,v2,v3,v4,v5", any values not used should*}
  73. {*be sent as zero, the bytes are sent via the IBM PC rom bios printer     *}
  74. {*controler services intr 17H (23) function 00H (0), write character to   *}
  75. {*printer. This method is used because all msdos services are out of      *}
  76. {*bounds to memory resident programmes, this includes all Turbo Pascal    *}
  77. {*input/output routines and most dynamic memory allocation routines,      *}
  78. {*although the WINMEN unit, which this programme uses for its windows and *}
  79. {*menus does not appear to be affected!. The procedure also checks for    *}
  80. {*errors on the printer line and produces an error message if one is found*}
  81. {**************************************************************************}
  82. procedure SEND_TO_PRN(num,v1,v2,v3,v4,v5 : byte; action : string);
  83. begin
  84.    index := ofs(v1);                                  {*ADDR OF TOP OF STACK*}
  85.    for count := 1 to num do                           {*LOOP THRO NUM TIMES*}
  86.    begin
  87.       regs.AH := 2;                                   {*GET PRINTER STATUS*}
  88.       regs.DX := 0;                                   {*PRINTER NUMBER*}
  89.       intr($17,regs);                                 {*CALL ROM BIOS PCS*}
  90.       if(regs.AH in[1,8,32]) then                     {*IF AN ERROR OCCURED*}
  91.       begin                                           {*LET USER KNOW      *}
  92.          WOPEN(error);
  93.          writeln(scr,chr(7),'Error Printer could be:-');
  94.          writeln(scr,'Off line.');
  95.          writeln(scr,'Out of paper or');
  96.          writeln(scr,'There is an I/O error.');
  97.          write(scr,'Press any key To Continue.....');
  98.          while not(keypressed) do;
  99.          WMCLOSE(error);
  100.          exit;
  101.       end
  102.       else                                            {*ELSE WERE OK TO SEND*}
  103.       begin
  104.          regs.AH := 0;                                {*WRITE CHAR TO PRINTER*}
  105.          regs.AL := mem[seg(v1):index];               {*CHAR TO BE WRITTEN*}
  106.          regs.DX := 0;                                {*PRINTER NUMBER*}
  107.          intr($17,regs);                              {*CALL ROM BIOS PCS*}
  108.          dec(index,2);                                {*DEC STACK POINTER TO*}
  109.       end;                                            {*NEXT VALUE          *}
  110.    end;
  111.  
  112.    WSELECT(setings);                                  {*SELECT OUTPUT WINDOW*}
  113.    gotoXY(actionX,actionY);                           {*POSITION CURSOR*}
  114.    if(pos('RESET',action) <> 0) then                  {*IF A RESET BEEN SENT*}
  115.    begin                                              {*CLEAR OUTPUT WINDOW *}
  116.       WCLRSCR(setings);
  117.       actionX := 1;
  118.       actionY := 1;
  119.    end;
  120.    write(scr,action,' ');                             {*PRINT COMMAND*}
  121.    actionX := whereX;                                 {*SAVE LOCAL CURSOR POS*}
  122.    actionY := whereY;
  123. end {SEND_TO_PRN};
  124.  
  125. {*****************************************************************************}
  126. {*PROCEDURE:MISC_COMS, This procedure displays all the remaining commands not*}
  127. {*covered in any other menu/procedure and sets the printer accordingly.      *}
  128. {*****************************************************************************}
  129. procedure MISC_COMS;
  130. begin
  131.    m13c := 10;
  132.    WMTITLE(menu_misc,4,14,'MISCELLANEOUS COMMANDS MENU');
  133.    while not(m13c in[0]) do
  134.    begin
  135.       m13c := POP_MENU(menu_misc,33,1);
  136.       case m13c of
  137.          1   : SEND_TO_PRN(2,27,64,0,0,0,'RESET');    {*ESC+@  *}
  138.          2   : SEND_TO_PRN(1,13,0,0,0,0,'PRINT');     {*CR     *}
  139.          3   : SEND_TO_PRN(1,27,0,0,0,0,'ESC');       {*ESC    *}
  140.          4   : SEND_TO_PRN(1,0,0,0,0,0,'NULL');       {*NULL   *}
  141.          5   : SEND_TO_PRN(2,27,60,0,0,0,'HOME_HEAD');{*ESC+<  *}
  142.          6   : SEND_TO_PRN(3,27,115,1,0,0,'HALF_SP'); {*ESC+s+1*}
  143.          7   : SEND_TO_PRN(3,27,115,0,0,0,'RHALF_SP');{*ESC+s+0*}
  144.          8   : SEND_TO_PRN(3,27,85,1,0,0,'SING_DIR'); {*ESC+U+1*}
  145.          9   : SEND_TO_PRN(3,27,85,0,0,0,'RSING_DIR');{*ESC+U+0*}
  146.          10  : SEND_TO_PRN(2,27,9,0,0,0,'ENAB_PE');   {*ESC+9  *}
  147.          11  : SEND_TO_PRN(2,27,8,0,0,0,'DISAB_PE');  {*ESC+8  *}
  148.       end {case};
  149.    end {while};
  150. end {MISC_COMS};
  151.  
  152. {*****************************************************************************}
  153. {*PROCEDURE:DATA_CON_COMS, This procedure displays all the data control comms*}
  154. {*available and sets the printer accordingly.                                *}
  155. {*****************************************************************************}
  156. procedure DATA_CON_COMS;
  157. begin
  158.    m12c := 10;
  159.    WMTITLE(menu_datacon,4,14,'DATA CONTROL COMMANDS MENU');
  160.    while not(m12c in[0]) do
  161.    begin
  162.       m12c := POP_MENU(menu_datacon,25,1);
  163.       case m12c of
  164.          1  : SEND_TO_PRN(2,27,64,0,0,0,'RESET');          {*ESC+@  *}
  165.          2  : SEND_TO_PRN(1,24,0,0,0,0,'CLEAR_BUFFER');    {*CAN    *}
  166.          3  : SEND_TO_PRN(1,127,0,0,0,0,'DEL_CHAR');       {*DEL    *}
  167.          4  : SEND_TO_PRN(1,17,0,0,0,0,'SEL_PRNTR');       {*DC1    *}
  168.          5  : SEND_TO_PRN(1,19,0,0,0,0,'DESEL_PRNTR');     {*DC3    *}
  169.          6  : SEND_TO_PRN(2,27,62,0,0,0,'MSB_ON');         {*ESC+>  *}
  170.          7  : SEND_TO_PRN(2,27,61,0,0,0,'MSB_OFF');        {*ESC+=  *}
  171.          8  : SEND_TO_PRN(2,27,35,0,0,0,'MSB_AS_IS');      {*ESC+#  *}
  172.          9  : SEND_TO_PRN(3,27,81,3,0,0,'DESEL_PRNTR_IBM');{*ESC+Q+3*}
  173.       end {case};
  174.    end {while};
  175. end {DATA_CON_COMS};
  176.  
  177. {*************************************************************************}
  178. {*PROCEDURE:WD_PROC_COMS, This procedure displays all the word processing*}
  179. {*commands available and sets the printer accordingly.                   *}
  180. {*************************************************************************}
  181. procedure WD_PROC_COMS;
  182. begin
  183.    m11c := 10;
  184.    WMTITLE(menu_wproc,4,14,'WORD PROCESSING COMMANDS MENU');
  185.    while not(m11c in[0]) do
  186.    begin
  187.       m11c := POP_MENU(menu_wproc,19,1);
  188.       case m11c of
  189.          1  : SEND_TO_PRN(2,27,64,0,0,0,'RESET');      {*ESC+@  *}
  190.          2  : SEND_TO_PRN(3,27,97,0,0,0,'LEFT_ALIGN'); {*ESC+a+0*}
  191.          3  : SEND_TO_PRN(3,27,97,1,0,0,'AUTO_CNTR');  {*ESC+a+1*}
  192.          4  : SEND_TO_PRN(3,27,97,2,0,0,'RIGHT_ALIGN');{*ESC+a+2*}
  193.          5  : SEND_TO_PRN(3,27,97,3,0,0,'AUTO_JUSTIF');{*ESC+a+3*}
  194.       end {case};
  195.    end {while};
  196. end {WD_PROC_COMS};
  197.  
  198. {*************************************************************************}
  199. {*PROCEDURE:PG_FORMAT_COMS, This procedure displays all the page format  *}
  200. {*commands and sets the printer accordingly. Also asks the user for input*}
  201. {*for those commands that require it.                                    *}
  202. {*************************************************************************}
  203. procedure PG_FORMAT_COMS;
  204. begin
  205.    m10c := 20;
  206.    WMTITLE(menu_pgfrmt,4,14,'PAGE FORMAT COMMANDS MENU');
  207.    while not(m10c in[0]) do
  208.    begin
  209.       m10c := POP_MENU(menu_pgfrmt,13,1);
  210.       case m10c of                                    {*GET USER INPUT*}
  211.          7,
  212.          10..16 : begin
  213.                      input := NEW_WIN(14,m10c+2,38,m10c+4,4,4,14,1,14);
  214.                      WOPEN(input);
  215.                      WMTITLE(input,7,12,'PAGE FORMAT');
  216.                      n := 150;
  217.                      while not(n in[0..137]) do
  218.                      begin
  219.                         write(scr,chr(10),'Input n:');
  220.                         readln(n);                    {*INPUT VALUE n*}
  221.                      end;
  222.                      WMDELETE(input);
  223.                      str(n,strn);
  224.                   end;
  225.          5,8    : begin
  226.                      input := NEW_WIN(14,m10c+2,48,m10c+4,4,4,14,1,14);
  227.                      WOPEN(input);
  228.                      WMTITLE(input,7,12,'PAGE FORMAT');
  229.                      n := 100; n1 := 100;
  230.                      while not(n in[0..80])or(n1 < n)or not(n1 in[0..80])  do
  231.                      begin
  232.                         write(scr,chr(10),'Input (n1<n2)<0..80>:');
  233.                         readln(n,n1);                 {*INPUT VALUES n n1 *}
  234.                      end;                             {*MUST BE A SPACE IN*}
  235.                      WMDELETE(input);                 {*BETWEEN VALUES    *}
  236.                      str(n,strn); str(n1,strn1);
  237.                   end;
  238.       end {case};
  239.  
  240.       case m10c of                                    {*BUILD COMMAND STRINGS*}
  241.          5  : strn := 'HT_'+strn+'_'+strn1;
  242.          7  : strn := 'HTE'+strn;
  243.          8  : strn := 'VT_'+strn+'_'+strn1;
  244.          10 : strn := 'VTE'+strn;
  245.          11 : strn := 'PLIN'+strn;
  246.          12 : begin
  247.                  plen := n;
  248.                  strn := 'PLL'+strn;
  249.               end;
  250.          13 : strn := 'LM'+strn;
  251.          14 : strn := 'RM'+strn;
  252.          15 : strn := 'SKPOS'+strn;
  253.          16 : strn := 'SKL'+strn;
  254.       end {case};
  255.  
  256.       case m10c of
  257.          1  : SEND_TO_PRN(2,27,64,0,0,0,'RESET');     {*ESC+@        *}
  258.          2  : SEND_TO_PRN(1,27,0,0,0,0,'BS');         {*BS           *}
  259.          3  : SEND_TO_PRN(1,27,0,0,0,0,'HT');         {*HT           *}
  260.          4  : SEND_TO_PRN(1,27,0,0,0,0,'VT');         {*VT           *}
  261.          5  : SEND_TO_PRN(5,27,65,n,n1,0,strn);       {*ESC+D+n1+n2+0*}
  262.          6  : SEND_TO_PRN(3,27,68,0,0,0,'RHORZ');     {*ESC+D+0      *}
  263.          7  : SEND_TO_PRN(4,27,101,0,n,0,strn);       {*ESC+e+0+n    *}
  264.          8  : SEND_TO_PRN(5,27,66,n,n1,0,strn);       {*ESC+B+n1+n2+0*}
  265.          9  : SEND_TO_PRN(3,27,66,0,0,0,'RVERT');     {*ESC+B+0      *}
  266.          10 : SEND_TO_PRN(4,27,101,1,n,0,strn);       {*ESC+e+1+n    *}
  267.          11 : SEND_TO_PRN(4,27,67,0,n,0,strn);        {*ESC+C+0+n    *}
  268.          12 : SEND_TO_PRN(3,27,67,n,0,0,strn);        {*ESC+C+n      *}
  269.          13 : SEND_TO_PRN(3,27,108,n,0,0,strn);       {*ESC+l+n      *}
  270.          14 : SEND_TO_PRN(3,27,81,n,0,0,strn);        {*ESC+Q+n      *}
  271.          15 : SEND_TO_PRN(4,27,102,0,n,0,strn);       {*ESC+f+0+n    *}
  272.          16 : SEND_TO_PRN(4,27,102,1,n,0,strn);       {*ESC+f+1+n    *}
  273.       end {case};
  274.    end {while};
  275. end {PG_FORMAT_COMS};
  276.  
  277. {*********************************************************************}
  278. {*PROCEDURE:PAP_FEED_COMS, This procedure displays all the paper feed*}
  279. {*commands and sets the printer accordingly. Also asks the user for  *}
  280. {*input for thoes commande thet require it                           *}
  281. {*********************************************************************}
  282. procedure PAP_FEED_COMS;
  283. begin
  284.    m9c := 10;
  285.    WMTITLE(menu_pfeed,4,14,'PAPER FEED COMMANDS MENU');
  286.    while not(m9c in[0]) do
  287.    begin
  288.       m9c := POP_MENU(menu_pfeed,8,1);
  289.       case m9c of
  290.          1 : SEND_TO_PRN(2,27,64,0,0,0,'RESET');      {*ESC+@  *}
  291.          2 : SEND_TO_PRN(1,12,0,0,0,0,'FF');          {*FF     *}
  292.          3 : SEND_TO_PRN(1,10,0,0,0,0,'LF');          {*LF     *}
  293.          4 : begin
  294.                 input := NEW_WIN(9,m9c+2,33,m9c+4,4,4,14,1,14);
  295.                 WOPEN(input);
  296.                 WMTITLE(input,7,12,'LINES TO SKIP');
  297.                 n := 150;
  298.                 while not(n in[1..127]) do
  299.                 begin
  300.                    write(scr,chr(10),'Input n<1..127>:');
  301.                    readln(n);                         {*INPUT VALUE n*}
  302.                 end;
  303.                 WMDELETE(input);
  304.                 str(n,strn);
  305.                 strn := 'SKIP'+strn;
  306.                 SEND_TO_PRN(3,27,78,n,0,0,strn);      {*ESC+N+n*}
  307.              end;
  308.          5 : SEND_TO_PRN(2,27,79,0,0,0,'RSKIP');      {*ESC+O  *}
  309.       end {case};
  310.    end {while};
  311. end {PAP_FEED_COMS};
  312.  
  313.  
  314. {*************************************************************************}
  315. {*PROCEDURE:LINE_SPC_COMS, This procedure displays all the line spacing  *}
  316. {*commands and sets the printer accordingly. Also asks the user for input*}
  317. {*for those commands that require it.                                    *}
  318. {*************************************************************************}
  319. procedure LINE_SPC_COMS;
  320. begin
  321.    m7c := 10;
  322.    WMTITLE(menu_linesp,4,14,'LINE SPACING MENU');
  323.    while not(m7c in[0]) do
  324.    begin
  325.       m7c := POP_MENU(menu_linesp,1,1);
  326.       case m7c of
  327.          5   : begin
  328.                   input := NEW_WIN(2,m7c+2,26,m7c+4,4,4,14,1,14);
  329.                   WOPEN(input);
  330.                   WMTITLE(input,7,12,'LINE SPACING');
  331.                   n := 100;
  332.                   while not(n in[0..85]) do
  333.                   begin
  334.                      write(scr,chr(10),'Input n<0..85>:');
  335.                      readln(n);                       {*INPUT VALUE n*}
  336.                   end;
  337.                   WMDELETE(input);
  338.                   str(n,strn);
  339.                   strn := 'LS'+strn+'/72';
  340.                end;
  341.          6,7 : begin
  342.                   input := NEW_WIN(2,m7c+2,26,m7c+4,4,4,14,1,14);
  343.                   WOPEN(input);
  344.                   WMTITLE(input,7,12,'LINE SPACING');
  345.                   write(scr,chr(10),'Input n<0..255>:');
  346.                   readln(n);                          {*INPUT VALUE n*}
  347.                   WMDELETE(input);
  348.                   str(n,strn);
  349.                   strn := 'LS'+strn+'/216';
  350.                end;
  351.       end {case};
  352.  
  353.       case m7c of
  354.          1 : SEND_TO_PRN(2,27,64,0,0,0,'RESET');      {*ESC+@      *}
  355.          2 : SEND_TO_PRN(2,27,48,0,0,0,'LS1/8"');     {*ESC+O      *}
  356.          3 : SEND_TO_PRN(2,27,1,1,0,0,'LS7/72"');     {*ESC+1      *}
  357.          4 : SEND_TO_PRN(2,27,2,2,0,0,'LS1/6"');      {*ESC+2      *}
  358.          5 : SEND_TO_PRN(3,27,65,n,0,0,strn);         {*ESC+A+n/72 *}
  359.          6 : SEND_TO_PRN(3,27,51,n,0,0,strn);         {*ESC+3+n/216*}
  360.          7 : SEND_TO_PRN(3,27,74,n,0,0,strn);         {*ESC+J+n/216*}
  361.       end {case};
  362.    end {while};
  363. end {LINE_SPC_COMS};
  364.  
  365. {****************************************************************************}
  366. {*PROCEDURE:SEL_CHAR_PITCH, This procedure displays the available characters*}
  367. {*per inch setings and sets the printer according to selection.             *}
  368. {****************************************************************************}
  369. procedure SEL_CHAR_PITCH;
  370. begin
  371.    m6c := 10;
  372.    WMTITLE(menu_pitch,4,14,'CHARACTER PITCH MENU');
  373.    while not(m6c in[0]) do
  374.    begin
  375.       m6c := POP_MENU(menu_pitch,53,3);
  376.       case m6c of
  377.          1 : SEND_TO_PRN(2,27,64,0,0,0,'RESET');      {*ESC+@   *}
  378.          2 : SEND_TO_PRN(3,27,119,0,0,0,'10CPI');     {*ESC+w+0 *}
  379.          3 : SEND_TO_PRN(3,27,119,1,0,0,'12CPI');     {*ESC+w+1 *}
  380.          4 : SEND_TO_PRN(3,27,119,2,0,0,'15CPI');     {*ESC+w+2 *}
  381.          5 : SEND_TO_PRN(3,27,119,3,0,0,'17CPI');     {*ESC+w+3 *}
  382.       end {case};
  383.    end {while};
  384. end {SEL_CHAR_PITCH};
  385.  
  386. {**********************************************************************}
  387. {*PROCEDURE:SEL_MODE_COMB, This procedure displays the character mode *}
  388. {*combinations available directly through preset multi-byte commands  *}
  389. {*and sets the printer according to selection.                        *}
  390. {**********************************************************************}
  391. procedure SEL_MODE_COMB;
  392. begin
  393.    m5c := 30;
  394.     WMTITLE(menu_comb,4,14,'CHAR MODE COMBIN MENU '+chr(24)+chr(25));
  395.    while not(m5c in[0]) do
  396.    begin
  397.       m5c := LIST_MENU(menu_comb,49,3,10);
  398.       case m5c of
  399.          1  : SEND_TO_PRN(5,27,64,27,33,0,'RESET');                   {E@E!+0 }
  400.          2  : SEND_TO_PRN(5,27,64,27,33,1,'RESET+ELITE');             {E@E!+1 }
  401.          3  : SEND_TO_PRN(5,27,64,27,33,4,'RESET+COMPRESSED');        {E@E!+4 }
  402.          4  : SEND_TO_PRN(5,27,64,27,33,8,'RESET+EMPHASIZED');        {E@E!+8 }
  403.          5  : SEND_TO_PRN(5,27,64,27,33,9,'RESET+ELITE+EMPH');        {E@E!+9 }
  404.          6  : SEND_TO_PRN(5,27,64,27,33,16,'RESET+DOUBLE');           {E@E!+16}
  405.          7  : SEND_TO_PRN(5,27,64,27,33,17,'RESET+ELITE+DOUBLE');     {E@E!+17}
  406.          8  : SEND_TO_PRN(5,27,64,27,33,20,'RESET+COMP+DOUBLE');      {E@E!+20}
  407.          9  : SEND_TO_PRN(5,27,64,27,33,24,'RESET+EMPH+DOUBLE');      {E@E!+24}
  408.          10 : SEND_TO_PRN(5,27,64,27,33,25,'RESET+ELITE+EMPH+DOUBLE');{E@E!+25}
  409.          11 : SEND_TO_PRN(5,27,64,27,33,32,'RESET+2WID');             {E@E!+32}
  410.          12 : SEND_TO_PRN(5,27,64,27,33,33,'RESET+ELITE+2WID');       {E@E!+33}
  411.          13 : SEND_TO_PRN(5,27,64,27,33,36,'RESET+COMP+2WID');        {E@E!+36}
  412.          14 : SEND_TO_PRN(5,27,64,27,33,40,'RESET+EMPH+2WID');        {E@E!+40}
  413.          15 : SEND_TO_PRN(5,27,64,27,33,41,'RESET+ELITE+EMPH+2WID');  {E@E!+41}
  414.          16 : SEND_TO_PRN(5,27,64,27,33,48,'RESET+DOUBLE+2WID');      {E@E!+48}
  415.          17 : SEND_TO_PRN(5,27,64,27,33,49,'RESET+ELITE+DOUBLE+2WID');{E@E!+49}
  416.          18 : SEND_TO_PRN(5,27,64,27,33,52,'RESET+COMP+DOUBLE+2WID'); {E@E!+52}
  417.          19 : SEND_TO_PRN(5,27,64,27,33,56,'RESET+EMPH+DOUBLE+2WID'); {E@E!+56}
  418.          20 : SEND_TO_PRN(5,27,64,27,33,57,'RESET+ELITE+EMPH+DOUBLE+2WID');
  419.       end {case};                                                     {E@E!+57}
  420.    end {while};
  421. end {SEL_MODE_COMB};
  422.  
  423. {***************************************************************************}
  424. {*PROCEDURE:SEL_PRN_MODE, This procedure displays the printer mode commands*}
  425. {*and sets the printer according to selection.                             *}
  426. {***************************************************************************}
  427. procedure SEL_PRN_MODE;
  428. begin
  429.    m4c := 10;
  430.    WMTITLE(menu_mode,4,14,'PRINTER MODE MENU');
  431.    while not(m4c in[0]) do
  432.    begin
  433.       m4c := POP_MENU(menu_mode,32,3);
  434.       case m4c of
  435.          1 : SEND_TO_PRN(2,27,64,0,0,0,'RESET');      {*ESC+@   *}
  436.          2 : SEND_TO_PRN(3,27,109,0,0,0,'STANDARD');  {*ESC+m+0 *}
  437.          3 : SEND_TO_PRN(3,27,109,1,0,0,'IBM_MATRIX');{*ESC+m+1 *}
  438.          4 : SEND_TO_PRN(3,27,109,2,0,0,'IBM_GR1');   {*ESC+m+2 *}
  439.          5 : SEND_TO_PRN(3,27,109,3,0,0,'IBM_GR2');   {*ESC+m+3 *}
  440.       end {case};
  441.    end {while};
  442. end {SEL_PRN_MODE};
  443.  
  444. {*****************************************************************************}
  445. {*PROCEDURE:SEL_CHAR_SET, This procedure displays the international character*}
  446. {*set commands and sets the printer according to selection.                  *}
  447. {*****************************************************************************}
  448. procedure SEL_CHAR_SET;
  449. begin
  450.    m3c := 20;
  451.    WMTITLE(menu_set,4,14,'CHARACTER SET MENU');
  452.    while not(m3c in[0]) do
  453.    begin
  454.       m3c := POP_MENU(menu_set,19,3);
  455.       case m3c of
  456.          1  : SEND_TO_PRN(2,27,64,0,0,0,'RESET');     {*ESC+@   *}
  457.          2  : SEND_TO_PRN(3,27,82,0,0,0,'USA');       {*ESC+R+0 *}
  458.          3  : SEND_TO_PRN(3,27,82,1,0,0,'FRA');       {*ESC+R+1 *}
  459.          4  : SEND_TO_PRN(3,27,82,3,0,0,'ENG');       {*ESC+R+3 *}
  460.          5  : SEND_TO_PRN(3,27,82,4,0,0,'DEN1');      {*ESC+R+4 *}
  461.          6  : SEND_TO_PRN(3,27,82,10,0,0,'DEN2');     {*ESC+R+10*}
  462.          7  : SEND_TO_PRN(3,27,82,5,0,0,'SWE');       {*ESC+R+5 *}
  463.          8  : SEND_TO_PRN(3,27,82,6,0,0,'ITALY');     {*ESC+R+6 *}
  464.          9  : SEND_TO_PRN(3,27,82,7,0,0,'SPAIN');     {*ESC+R+7 *}
  465.          10 : SEND_TO_PRN(3,27,82,8,0,0,'JAP');       {*ESC+R+8 *}
  466.          11 : SEND_TO_PRN(3,27,82,9,0,0,'NOR');       {*ESC+R+9 *}
  467.       end {case};
  468.    end {while};
  469. end {SEL_CHAR_SET};
  470.  
  471. {**********************************************************************}
  472. {*PROCEDURE:SEL_CHAR_MODE, This procedure displays the Character mode *}
  473. {*commands and sets the printer according to selection                *}
  474. {**********************************************************************}
  475. procedure SEL_CHAR_MODE;
  476. begin
  477.    m2c := 40;
  478.    WMTITLE(menu_char2,4,14,'CHAR MODE COMMANDS MENU '+chr(24)+chr(25));
  479.    while not(m2c in[0]) do
  480.    begin
  481.       m2c := LIST_MENU(menu_char2,5,3,10);
  482.       case m2c of
  483.          1  : SEND_TO_PRN(2,27,64,0,0,0,'RESET');     {*ESC+@  *}
  484.          2  : SEND_TO_PRN(1,14,0,0,0,0,'2WID1');      {*SO     *}
  485.          3  : SEND_TO_PRN(2,27,14,0,0,0,'2WID1');     {*ESC+SO *}
  486.          4  : SEND_TO_PRN(1,20,0,0,0,0,'R2WID1');     {*DC4    *}
  487.          5  : SEND_TO_PRN(3,27,87,1,0,0,'2WID');      {*ESC+W+1*}
  488.          6  : SEND_TO_PRN(3,27,87,0,0,0,'RALL2WID');  {*ESC+W+0*}
  489.          7  : SEND_TO_PRN(1,15,0,0,0,0,'COMP1');      {*SI     *}
  490.          8  : SEND_TO_PRN(2,27,15,0,0,0,'COMP2');     {*ESC+SI *}
  491.          9  : SEND_TO_PRN(1,18,0,0,0,0,'RCOMP');      {*DC2    *}
  492.          10 : SEND_TO_PRN(2,27,71,0,0,0,'DOUBLE');    {*ESC+G  *}
  493.          11 : SEND_TO_PRN(2,27,72,0,0,0,'RDOUBLE');   {*ESC+H  *}
  494.          12 : SEND_TO_PRN(2,27,69,0,0,0,'EMPH');      {*ESC+E  *}
  495.          13 : SEND_TO_PRN(2,27,70,0,0,0,'REMPH');     {*ESC+F  *}
  496.          14 : SEND_TO_PRN(2,27,80,0,0,0,'PICA');      {*ESC+P  *}
  497.          15 : SEND_TO_PRN(2,27,77,0,0,0,'ELITE');     {*ESC+M  *}
  498.          16 : SEND_TO_PRN(2,27,58,0,0,0,'ELIBM');     {*ESC+:  *}
  499.          17 : SEND_TO_PRN(2,27,110,0,0,0,'NLQPIC');   {*ESC+n  *}
  500.          18 : SEND_TO_PRN(2,27,111,0,0,0,'NLQELI');   {*ESC+o  *}
  501.          19 : SEND_TO_PRN(3,27,120,1,0,0,'NLQFON');   {*ESC+x+1*}
  502.          20 : SEND_TO_PRN(3,27,120,0,0,0,'DRAFON');   {*ESC+x+0*}
  503.          21 : SEND_TO_PRN(3,27,83,0,0,0,'SUPSCR');    {*ESC+S+0*}
  504.          22 : SEND_TO_PRN(3,27,83,1,0,0,'SUBSCR');    {*ESC+S+1*}
  505.          23 : SEND_TO_PRN(2,27,84,0,0,0,'RSUPSUB');   {*ESC+T  *}
  506.          24 : SEND_TO_PRN(2,27,52,0,0,0,'ITALIC');    {*ESC+4  *}
  507.          25 : SEND_TO_PRN(2,27,53,0,0,0,'RITALIC');   {*ESC+5  *}
  508.          26 : SEND_TO_PRN(2,27,54,0,0,0,'ITALSTD');   {*ESC+6  *}
  509.          27 : SEND_TO_PRN(2,27,55,0,0,0,'RITALSTD');  {*ESC+7  *}
  510.          28 : SEND_TO_PRN(2,27,55,0,0,0,'IBMGRM1');   {*ESC+6  *}
  511.          29 : SEND_TO_PRN(2,27,54,0,0,0,'IBMGR2');    {*ESC+7  *}
  512.          30 : SEND_TO_PRN(3,27,45,1,0,0,'ULINE');     {*ESC+-+1*}
  513.          31 : SEND_TO_PRN(3,27,45,0,0,0,'RULINE');    {*ESC+-+0*}
  514.          32 : SEND_TO_PRN(3,27,112,1,0,0,'PROP');     {*ESC+p+1*}
  515.          33 : SEND_TO_PRN(3,27,112,0,0,0,'RPROP');    {*ESC+p+0*}
  516.       end {case};
  517.    end {while};
  518. end {SEL_CHAR_MODE};
  519.  
  520. {****************************************************************************}
  521. {*PROCEDURE:CHAR_MODE_COMS, This procedure displays the bar menu which gives*}
  522. {*access to all the character mode command list and pop menus               *}
  523. {****************************************************************************}
  524. procedure CHAR_MODE_COMS;
  525. begin
  526.    m8c := 10;
  527.    while not(m8c in[0]) do
  528.    begin
  529.       m8c := BAR_MENU(menu_char1,1,1,80);
  530.       case m8c of
  531.          1 : SEL_CHAR_MODE;                           {*CALL PROCEDURES*}
  532.          2 : SEL_CHAR_SET;
  533.          3 : SEL_PRN_MODE;
  534.          4 : SEL_MODE_COMB;
  535.          5 : SEL_CHAR_PITCH;
  536.       end {case};
  537.    end {while};
  538. end {CHAR_MODE_COMS};
  539.  
  540. {********************************************************************}
  541. {*PROCEDURE:MAIN_MENU, This is the printer options main menu routine*}
  542. {*and calls all the other printer option menus                      *}
  543. {********************************************************************}
  544. procedure MAIN_MENU;
  545. begin
  546.    WOPEN(setings);
  547.    WMTITLE(setings,4,14,'COMMANDS SENT TO PRINTER SINCE LAST RESET');
  548.    m1c := 10;
  549.    WMTITLE(menu_main,4,14,'COMMANDS MAIN MENU');
  550.    while not(m1c in[0,9]) do
  551.    begin
  552.       m1c := POP_MENU(menu_main,27,8);
  553.       case m1c of
  554.          1 : CHAR_MODE_COMS;                          {*CALL PROCEDURES*}
  555.          2 : LINE_SPC_COMS;
  556.          3 : PAP_FEED_COMS;
  557.          4 : PG_FORMAT_COMS;
  558.          5 : WD_PROC_COMS;
  559.          6 : DATA_CON_COMS;
  560.          7 : MISC_COMS;
  561.          8 : PRINT;
  562.          9 : WMCLOSE(menu_main)
  563.       end {case};
  564.    end {while};
  565.    WMCLOSE(setings);
  566. end {MAIN_MENU};
  567.  
  568. {**************************************************************************}
  569. {*PROCEDURE:SET_UP_MENUS, This procedure sets up all the option menus reqd*}
  570. {*for the programme Printer.exe                                           *}
  571. {**************************************************************************}
  572. procedure SET_UP_MENUS;
  573. begin
  574.    error := NEW_WIN(24,9,56,15,1,4,14,7,12);          {*ERROR WINDOW*}
  575.    setings := NEW_WIN(1,22,80,25,1,7,1,1,14);         {*SETTINGS WINDOW*}
  576.    layout := NEW_WIN(41,1,71,11,1,0,15,0,12);         {*PAGE LAYOUT WINDOW*}
  577.    printing := NEW_WIN(1,12,80,25,1,7,0,0,2);         {*TEXT FILE WINDOW*}
  578.    colotog := 'G';                                    {*COLOUR TOGGLE*}
  579.  
  580.    getmem(mt,9*81);                                   {*MAIN MENU (POP)*}
  581.    mt^[1] := 'Character Mode Commands';
  582.    mt^[2] := 'Line Spacing Commands';
  583.    mt^[3] := 'Paper Feed Commands';
  584.    mt^[4] := 'Page Format Commands';
  585.    mt^[5] := 'Word Processing Commands';
  586.    mt^[6] := 'Data Control Commands';
  587.    mt^[7] := 'Miscellaneous Commands';
  588.    mt^[8] := 'Print Menu';
  589.    mt^[9] := 'Quit';
  590.    menu_main := NEW_MENU(1,1,14,7,0,9,mt,9);
  591.    freemem(mt,9*81);
  592.  
  593.    getmem(mt,5*81);                                   {*MAIN CHARACTER MODE*}
  594.    mt^[1] := 'CHAR MODE';                             {*MENU (BAR)         *}
  595.    mt^[2] := 'CHAR SET';
  596.    mt^[3] := 'PRINTER MODE';
  597.    mt^[4] := 'MODE COMBIN';
  598.    mt^[5] := 'CHAR PITCH';
  599.    menu_char1 := NEW_MENU(1,1,14,4,14,9,mt,5);
  600.    freemem(mt,5*81);
  601.  
  602.    getmem(mtc,5*81);                                  {*BAR MENU COMMENTS*}
  603.    mtc^[1] := 'Display Character Mode (User Combination) Selection Menu';
  604.    mtc^[2] := 'Display International Character Set Selection Menu';
  605.    mtc^[3] := 'Display Printer Mode Selection Menu';
  606.    mtc^[4] := 'Display Character Mode (Preset Combination) Selection Menu';
  607.    mtc^[5] := 'Display Character Pitch Selection Menu';
  608.    MBAR_COMMENT(menu_char1,mtc);
  609.    freemem(mt,5*81);
  610.  
  611.    getmem(mt,33*81);                                  {*CHAR MODE COMMANDS*}
  612.    mt^[1]  := 'Reset (Clear) Printer';                {*SUB MENU 1 (LIST) *}
  613.    mt^[2]  := 'Set One-Line Double Width Print 1';
  614.    mt^[3]  := 'Set One-Line Double Width Print 2';
  615.    mt^[4]  := 'Release One-Line Double Width Prnt';
  616.    mt^[5]  := 'Set Double Width Printing';
  617.    mt^[6]  := 'Release All Double Width Settings';
  618.    mt^[7]  := 'Set Compressed Printing 1';
  619.    mt^[8]  := 'Set Compressed Printing 2';
  620.    mt^[9]  := 'Release Compressed or IBM Elite';
  621.    mt^[10] := 'Set Double Printing';
  622.    mt^[11] := 'Release Double Printing';
  623.    mt^[12] := 'Set Emphasis Printing';
  624.    mt^[13] := 'Release Emphasis Printing';
  625.    mt^[14] := 'Set Pica Pitch';
  626.    mt^[15] := 'Set Elite Pitch';
  627.    mt^[16] := 'Set Elite Pitch (IBM Mode Only)';
  628.    mt^[17] := 'Set NLQ (Pica Pitch) Mode';
  629.    mt^[18] := 'Set NLQ (Elite Pitch) Mode';
  630.    mt^[19] := 'Set NLQ Font';
  631.    mt^[20] := 'Set Draft Font';
  632.    mt^[21] := 'Set Superscript Mode';
  633.    mt^[22] := 'Set Subscript Mode';
  634.    mt^[23] := 'Release Sub/Superscript Mode';
  635.    mt^[24] := 'Set Italic Mode';
  636.    mt^[25] := 'Release Italic Mode';
  637.    mt^[26] := 'Set Italic Int Mode (Std Mode)';
  638.    mt^[27] := 'Release Italic Int Mode (Std Mode)';
  639.    mt^[28] := 'Set IBM Graphics Mode 1 (IBM Mode)';
  640.    mt^[29] := 'Set IBM Graphics Mode 2 (IBM Mode)';
  641.    mt^[30] := 'Set Underline Printing';
  642.    mt^[31] := 'Release Underline Printing';
  643.    mt^[32] := 'Set Proportional Spacing Mode';
  644.    mt^[33] := 'Release Proportional Spacing Mode';
  645.    menu_char2 := NEW_MENU(1,1,14,7,0,9,mt,33);
  646.    freemem(mt,33*81);
  647.  
  648.    getmem(mt,11*81);                                  {*CHAR MODE COMMANDS*}
  649.    mt^[1] :=  '**RESET (CLEAR) PRINTER*';             {*SUB MENU 2 (POP)  *}
  650.    mt^[2] :=  '******* U.S.A. *********';
  651.    mt^[3] :=  '******* FRANCE *********';
  652.    mt^[4] :=  '******* ENGLAND ********';
  653.    mt^[5] :=  '******* DENMARK 1 ******';
  654.    mt^[6] :=  '******* DENMARK 2 ******';
  655.    mt^[7] :=  '******* SWEDEN *********';
  656.    mt^[8] :=  '******* ITALY **********';
  657.    mt^[9] :=  '******* SPAIN **********';
  658.    mt^[10]:=  '******* JAPAN **********';
  659.    mt^[11] := '******* NORWAY *********';
  660.    menu_set := NEW_MENU(1,1,14,7,0,1,mt,11);
  661.    freemem(mt,11*81);
  662.  
  663.    getmem(mt,5*81);                                   {*CHAR MODE COMMANDS*}
  664.    mt^[1] := 'Reset (Clear) Printer';                 {*SUB MENU 3 (POP)  *}
  665.    mt^[2] := 'Set Standard Mode          ';
  666.    mt^[3] := 'Set IBM Matrix Mode';
  667.    mt^[4] := 'Set IBM Graphics Mode 1';
  668.    mt^[5] := 'Set IBM Graphics Mode 2';
  669.    menu_mode := NEW_MENU(1,1,14,7,0,9,mt,5);
  670.    freemem(mt,5*81);
  671.  
  672.    getmem(mt,20*81);                                  {*CHAR MODE COMMANDS*}
  673.    mt^[1] :=  'RESET (CLEAR) PRINTER';                {*SUB MENU 4 (LIST) *}
  674.    mt^[2] :=  'RESET+ELITE';
  675.    mt^[3] :=  'RESET+COMPRESSED';
  676.    mt^[4] :=  'RESET+EMPHASIZED';
  677.    mt^[5] :=  'RESET+ELITE+EMPH';
  678.    mt^[6] :=  'RESET+DOUBLE';
  679.    mt^[7] :=  'RESET+ELITE+DOUBLE';
  680.    mt^[8] :=  'RESET+COMP+DOUBLE';
  681.    mt^[9] :=  'RESET+EMPH+DOUBLE';
  682.    mt^[10] := 'RESET+ELITE+EMPH+DOUBLE';
  683.    mt^[11] := 'RESET+2WID';
  684.    mt^[12] := 'RESET+ELITE+2WID';
  685.    mt^[13] := 'RESET+COMP+2WID';
  686.    mt^[14] := 'RESET+EMPH+2WID';
  687.    mt^[15] := 'RESET+ELITE+EMPH+2WID';
  688.    mt^[16] := 'RESET+DOUBLE+2WID';
  689.    mt^[17] := 'RESET+ELITE+DOUBLE+2WID';
  690.    mt^[18] := 'RESET+COMP+DOUBLE+2WID';
  691.    mt^[19] := 'RESET+EMPH+DOUBLE+2WID';
  692.    mt^[20] := 'RESET+ELITE+EMPH+DOUBLE+2WID';
  693.    menu_comb := NEW_MENU(1,1,14,7,0,9,mt,20);
  694.    freemem(mt,20*81);
  695.  
  696.    getmem(mt,5*81);                                   {*CHAR MODE COMMANDS*}
  697.    mt^[1] := 'Reset (Clear) Printer     ';            {*SUB MENU 5 (POP)  *}
  698.    mt^[2] := '10 Characters Per Inch';
  699.    mt^[3] := '12 Characters Per Inch';
  700.    mt^[4] := '15 Characters Per Inch';
  701.    mt^[5] := '17 Characters Per Inch';
  702.    menu_pitch := NEW_MENU(1,1,14,7,0,9,mt,5);
  703.     freemem(mt,5*81);
  704.  
  705.     getmem(mt,7*81);                                   {*LINE SPACING COMMANDS*}
  706.    mt^[1] := 'Reset (Clear) Printer';                 {*MENU (POP)           *}
  707.    mt^[2] := 'Set Line Spacing To 1/8"';
  708.    mt^[3] := 'Set Line Spacing To 7/72"';
  709.    mt^[4] := 'Set Line Spacing To 1/6"';
  710.    mt^[5] := 'Set Line Spacing To n/72"';
  711.    mt^[6] := 'Set Line Spacing To n/216"';
  712.    mt^[7] := '1-Line Only TO n/216"';
  713.    menu_linesp := NEW_MENU(1,1,14,7,0,9,mt,7);
  714.    freemem(mt,7*81);
  715.  
  716.    getmem(mt,5*81);                                   {*PAPER FEED COMMANDS*}
  717.    mt^[1] := 'Reset (Clear) Printer';                 {*MENU (POP)         *}
  718.    mt^[2] := 'Advance Paper To Next Top Of Form Position';
  719.    mt^[3] := 'Advance Paper One Line';
  720.    mt^[4] := 'Set Skip Perforation To n Lines';
  721.    mt^[5] := 'Release Skip Perforation';
  722.    menu_pfeed := NEW_MENU(1,1,14,7,0,9,mt,5);
  723.    freemem(mt,5*81);
  724.  
  725.    getmem(mt,16*81);                                  {*PAGE FORMAT COMMANDS*}
  726.    mt^[1]  := 'Reset (Clear) Printer';                {*MENU (POP)          *}
  727.    mt^[2]  := 'Print, Then Backspace One Character';
  728.    mt^[3]  := 'Execute Horizontal Tabulation';
  729.    mt^[4]  := 'Execute Vertical Tabulation';
  730.    mt^[5]  := 'Set Horizontal Tabs T1..T32';
  731.    mt^[6]  := 'Release Horizontal Tabs T1..T32';
  732.    mt^[7]  := 'Set Horizontal Tabulation Every n Columns';
  733.    mt^[8]  := 'Set Vertical Tabulation T1..T32';
  734.    mt^[9]  := 'Release Vertical Tabulation T1..T32';
  735.    mt^[10] := 'Set Vertical Tabultion Every n Lines';
  736.    mt^[11] := 'Set Page Length n In Inches';
  737.    mt^[12] := 'Set Page Length To n Lines';
  738.    mt^[13] := 'Set Left Margin';
  739.    mt^[14] := 'Set Right Margin (Std Mode Only)';
  740.    mt^[15] := 'Skip n Columns On a Line';
  741.    mt^[16] := 'Skip n Lines';
  742.    menu_pgfrmt := NEW_MENU(1,1,14,7,0,9,mt,16);
  743.    freemem(mt,16*81);
  744.  
  745.    getmem(mt,5*81);                                   {*WORD PROCESSING COMS*}
  746.    mt^[1] := 'Reset (Clear) Printer';                 {*MENU (POP)          *}
  747.    mt^[2] := 'Enable Left Alignment of Each Line';
  748.    mt^[3] := 'Enable Auto Centering of Each Line';
  749.    mt^[4] := 'Enable Right Alignment of Each Line';
  750.    mt^[5] := 'Enable Auto Justification of Each Line';
  751.    menu_wproc := NEW_MENU(1,1,14,7,0,9,mt,5);
  752.    freemem(mt,5*81);
  753.  
  754.    getmem(mt,9*81);                                   {*DATA CONTROL COMMANDS*}
  755.    mt^[1] := 'Reset (Clear) Printer';                 {*MENU (POP)           *}
  756.    mt^[2] := 'Clear All Data In Print Buffer';
  757.    mt^[3] := 'Delete Last Printable Character';
  758.    mt^[4] := 'Select Printer Remotely';
  759.    mt^[5] := 'Deselect Printer Remotely';
  760.    mt^[6] := 'Set The MSB On (Most Signif Bit=1)';
  761.    mt^[7] := 'Set The MSB Off (Most Signif Bit=0)';
  762.    mt^[8] := 'Cancel MSB Setting (Send Byte As Is)';
  763.    mt^[9] := 'Deselect Printer Remotely (IBM Mode Only)';
  764.    menu_datacon := NEW_MENU(1,1,14,7,0,9,mt,9);
  765.    freemem(mt,9*81);
  766.  
  767.    getmem(mt,11*81);                                  {*MISCELLANEOUS COMS*}
  768.    mt^[1]  := 'Reset (Clear) Printer';                {*MENU (POP)        *}
  769.    mt^[2]  := 'Start Printing';
  770.    mt^[3]  := 'First Byte Of Multi-Byte Control codes';
  771.    mt^[4]  := 'Last Byte Of Certain Multi-Byte Control Codes';
  772.    mt^[5]  := 'Home The Print Head';
  773.    mt^[6]  := 'Set Half Speed Printing (Quiet Mode)';
  774.    mt^[7]  := 'Release half Speed Printing (Quiet Mode)';
  775.    mt^[8]  := 'Set Single Direction Printing';
  776.    mt^[9]  := 'Release Single Direction Printing';
  777.    mt^[10] := 'Enable Paper-End Detection';
  778.    mt^[11] := 'Disable Paper-End Detection';
  779.    menu_misc := NEW_MENU(1,1,14,7,0,9,mt,11);
  780.    freemem(mt,11*81);
  781.  
  782.    getmem(mt,13*81);                                   {*PRINT MENU (POP)*}
  783.    mt^[1]  := 'FileName Stamping On/Off';
  784.    mt^[2]  := 'FileDate Stamping On/Off';
  785.    mt^[3]  := 'FileTime Stamping On/Off';
  786.    mt^[4]  := 'FileSize Stamping On/Off';
  787.    mt^[5]  := 'System Date Stamping On/Off';
  788.    mt^[6]  := 'System Time Stamplig On/Off';
  789.    mt^[7]  := 'Page Numbering On/Off';
  790.    mt^[8]  := 'Page Breaking On/Off';
  791.    mt^[9]  := 'Set Individual Or Global';
  792.    mt^[10] := 'Select Global Copies';
  793.    mt^[11] := 'Select File(s) To Print';
  794.    mt^[12] := 'View Current File List';
  795.    mt^[13] := 'Start Printing';
  796.    menu_print := NEW_MENU(1,1,14,7,0,9,mt,13);
  797.    freemem(mt,13*81);
  798. end {SET_UP_MENUS};
  799.  
  800. {****************************************************************************}
  801. {*PROCEDURE:MAIN, This is the main procedure it builds most of the menus and*}
  802. {*windows, displays the credits and passes control to MENU_MAIN().          *}
  803. {****************************************************************************}
  804. begin
  805. {   MAUTO_IN := TRUE; }
  806. {   MAUTO_OUT := TRUE;
  807.     assign(mout,'\pas\pas\pageprnt');
  808.     rewrite(mout);}
  809.  
  810.    assigncrt(scr);                                    {*SET UP FAST TEXT SCR*}
  811.    rewrite(scr);                                      {*OPEN IT FOR USE*}
  812.    textattr_safe := textattr;                         {*SAVE TEXT COLOURS*}
  813.    textbackground(6);                                 {*BACKGROUND TO RED*}
  814.    actionX := 1;                                      {*POSITION IN SET WIND*}
  815.    actionY := 1;
  816.    files := 0;                                        {*INIT FILES COUNT*}
  817.    ncopies := 1; copies := '1';                       {*INIT COPIES COUNT*}
  818.    plen := 66;                                        {*DEFAULT PAGE LENGTH*}
  819.    fname := false; fdate := false; ftime := false;    {*INIT FILE FLAGS*}
  820.    fsize := false;
  821.    sdate := false; stime := false; pgnum := false;    {*INIT SYSTEM FLAGS*}
  822.    pbreak := false; Icopies := false;                 {*INIT OTHER FLAGS*}
  823.    clrscr;
  824.    hello := NEW_WIN(23,9,56,14,1,1,14,7,0);
  825.    WOPEN(hello);
  826.    writeln(scr,'  LOADING "PAGEPRNT.EXE" V1.0 ');
  827.    writeln(scr,'  A PRINTER SET UP UTILITY BY ');
  828.    writeln(scr,'     G.R.DYKE (c)01/12/93     ');
  829.    SET_UP_MENUS;                                      {*CALL TO SET UP MENUS*}
  830.    gotoxy(1,4);
  831.    writeln(scr,'   "PAGEPRNT.EXE" NOW READY   ');
  832.    delay(1500);
  833.    WMDELETE(hello);
  834.    MAIN_MENU;                                         {*CALL MAIN MENU*}
  835.    textattr := textattr_safe;                         {*RESTORE TEXT COLOURS*}
  836.    clrscr;
  837.  
  838. {  close(mout); }
  839. end {MAIN}.
  840.